有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从特定的持久性Tibco EMS订阅中删除消息

我有Tibco EMS服务器、一些主题和对这些主题的持久订阅数(每个主题不止一个)。 我的任务是删除(通过适当的确认模式接收)特定持久订阅者的消息。 我的问题:是否可以用我自己的订阅者(使用相同的名字、id)来“替换”订阅者的待处理消息?重要的是不要影响主题的挂起消息,换句话说,从一个主题订阅中删除一些消息,但将这些消息保留在另一个主题(同一主题)订阅中


共 (1) 个答案

  1. # 1 楼答案

    嗯,我找到答案了,只是之前忘了发了。

    如上所述,根据问题本身,无法从主题中删除消息。但我没有什么不同的任务:删除特定持久订阅下的消息。这是真实的(有一些条件)。

    比方说,你必须从持久订阅“MySubscr”中删除邮件。要做到这一点,您应该创建连接,并使用相同的名称“MySubscr”创建持久订户。但这还不够。如果您只是这样做,那么将创建另一个具有相同名称的持久订阅者,但该订阅者与不同的ClientID连接。它将作为独立的持久连接运行,不会对所需的“MySubscr”持久连接产生任何影响(实际上,它们看起来像MySubscr:123和MySubscr:567持久订阅,其中123和567是clientID,至少对Tibcomes是这样)。要修复它,您应该通过连接将ClientID显式设置为您的连接。setClientID()方法,但只有在初始连接未连接时才能执行此操作(这就是为什么我提到了持久订阅者,它可以在订阅者未连接的情况下累积消息)。

    所以你应该等到订阅服务器自动断开连接(isConnected()。在此之后,将ClientID设置为您的连接,并访问此订阅者的消息。您可以使用确认模式客户端(然后它们将保留在主题中)或自动模式(然后它们将被删除)阅读消息。

    重要提示:您不能使用某些消息,所有消息都像队列中的消息一样使用,因此您只能逐个使用。如果您发现一些不需要的消息,并希望删除它(通过使用自动确认模式或通过调用消息上的acknowledge()方法),那么您将丢失之前的所有消息。好吧,如果不删除之前的消息,就无法删除消息。

    另一个重要注意事项:当您使用消息魔法时,重要的是初始客户端在连接未关闭之前不要再次连接,因为它将获得DublicateClientIdeException(如果它使用的是特定的ClientID),或者它将创建另一个持久订阅,该订阅将无法访问来自该订阅的先前消息